<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //Promise的原型方法有三个:then catch finally
        const p1 = new Promise((resolve, reject) => {
            // throw new Error("网络出现问题!!!!")//进入then执行.否则直接报错
            try {
                console.log("开始请求A.....")
                // throw new Error("网络出现问题!!!!")//进入then执行,否则进入try catch中的catch执行
                setTimeout(() => {
                // throw new Error("网络出现问题!!!!")//直接报错，不进入then和catch
                    console.log("数据请求成功");
                    resolve({
                        token: "hskahdoqwhdlkash"
                    })
                }, 2000)
            } catch (e) {
                reject("e",e.message)
            }
        })

        p1.then(value=>{
            console.log("处理成功",value);//处理成功 {token: 'hskahdoqwhdlkash'}
        },reason=>{
            console.log("处理失败",reason);//处理失败 网络出现问题!!!!
        })

        console.log(p1);

        

        /*
        Promise原型方法then:
         -Promise的回调函数是同步的
         -then方法的绑定是同步的,实参回调函数是异步的
         -then接受两个回调参数作为实参,第一个处理成功状态Promise实例的逻辑,第二个处理失败状态的Promise的实例
         -then的实参回调函数的实参可以接收到调用then方法的Promise实例的返回值
            -底层逻辑:在Promise的原型上的封装then方法时,通过对promise实例的判断,取到状态对应的值并通过回调函数的实参返回
            Promise.prototype.then = function(callback1,callback2){
            if(p1.PromiseState === "fulfilled"){
                callback1(p1.PromiseResult)
            }else if(p1.PromiseState === "rejected"){
                callback2(p1.PromiseResult)
            }
        }
        
        */
    </script>
</body>

</html>